package cn.heyige.backend.service;

import cn.heyige.backend.dto.DivinationFeedbackDTO;
import cn.heyige.backend.entity.DivinationFeedbackDO;

import java.util.List;
import java.util.Map;

/**
 * 占卜反馈服务接口 - 精简版
 *
 * 专注于核心反馈管理功能，提高系统性能和可维护性
 *
 * @author CodeBuddy
 */
public interface FeedbackService {
    
    /**
     * 保存反馈
     *
     * @param feedback 反馈实体
     * @return 保存后的反馈实体
     */
    DivinationFeedbackDO saveFeedback(DivinationFeedbackDO feedback);
    
    /**
     * 获取用户反馈历史
     *
     * @param userId 用户ID
     * @param pageNum 当前页
     * @param pageSize 页大小
     * @return 反馈DTO列表
     */
    List<DivinationFeedbackDTO> getFeedbackByUserId(Integer userId, Integer pageNum, Integer pageSize);
    
    /**
     * 获取卦象准确率统计
     *
     * @return 卦象名称 -> 准确率
     */
    Map<String, Double> getHexagramAccuracyRates();
    
    /**
     * 获取城市准确率统计
     *
     * @return 城市名称 -> 准确率
     */
    Map<String, Double> getCityAccuracyRates();
    
    /**
     * 获取心情准确率统计
     *
     * @return 心情状态 -> 准确率
     */
    Map<String, Double> getMoodAccuracyRates();
    
    /**
     * 分析反馈数据并更新权重
     *
     * @return 是否更新成功
     */
    boolean analyzeAndUpdateWeights();
    
    /**
     * 获取用户准确率
     *
     * @param userId 用户ID
     * @return 准确率（0-1）
     */
    double getUserAccuracyRate(Long userId);

    /**
     * 统计用户反馈数量
     *
     * @param userId 用户ID
     * @return 反馈数量
     */
    long countByUserId(Integer userId);
    
    /**
     * 删除反馈
     *
     * @param feedbackId 反馈ID
     * @param userId 用户ID
     * @return 是否删除成功
     */
    boolean deleteFeedback(Long feedbackId, Integer userId);
}